/**
 * device_scan.js 扫描设备的js文件
 */
/**
 * 扫描设备IP
 */
var progress = 0;	// 初始化扫描进度
var sum = 0;		// 设备总数
var unknown = 0;	// 未知错误
$("#scan").click(function (){
	sum = 0;		// 设备总数初始化
	successnum = 0;	// 设备成功数初始化	
	failnum = 0;	// 设备失败数初始化
	progress = 0;	// 初始化扫描进度
	if(ipnull()){
		$("#scan_log").empty();		// 点击扫描先清空日志
		// 获取起始IP
		var startip = $("#startip").val();
		// 获取结束IP
		var endip = $("#endip").val();
		// 验证ip地址
		iplist = getiplist(startip,endip);
		if(!iplist){
			layer.tips("网段输入错误,请检查!","#scan",{time:1000});
		}else{
			$("#scan").attr("disabled","disabled");		// 扫描中 按钮设置为禁用 避免请求多次
			// 赋值总数
			sum = iplist.length;
			$("#devicesum").text(sum);	// 修改扫描总数
			for(var o=0;o<iplist.length;o++){
				$.ajax({
					type: "GET",
					url: "/CloudFlag-IOS/index.php/device/scanDevice",
					data: { ip : iplist[o]},
					dataType:'json',
					success:function(data){
						addDevcieLog(data);	// 添加扫描日志
					},
					error:function(){
						unknown ++;		// 未知错误递增
						layer.msg("错误",{time:1000});
					}
				});
			}
		}
	}
});

/**
 * 判断IP文本框是否为空
 */
function ipnull(){
	if(!$("#startip").val() && !$("#endip").val()){
		layer.tips("起始IP和结束IP都不能为空","#scan",{time:1000});
	}else if(!$("#startip").val()){
		layer.tips("起始IP不能为空","#startip",{time:1000});
	}else if(!$("#endip").val()){
		layer.tips("结束IP不能为空","#endip",{time:1000});
	}else{
		return true;
	}
}

/**
 * 添加扫描设备日志
 */
var successnum = 0;	// 成功数
var failnum = 0;	// 失败数
function addDevcieLog(parm) {
	$("#progress").text(++progress);	// 修改扫描进度
	var html = "";
	if(parm.status == "success"){
		successnum ++;
		sum --;
		init(successnum,failnum,sum);		// 加载图形
		html += "<span>"+ parm.ip +"&nbsp;"+ parm.reason +" </span><br />";
		scanok(sum);	// 检测是否扫描完成
	}else{
		failnum ++;
		sum --;
		init(successnum,failnum,sum);		// 加载图形
		if(parm.reason == "设备已存在"){
			html += "<span style=\"color:#FFFF00\">"+ parm.ip +"&nbsp;"+ parm.reason +"</span><br />";
		}else{
			html += "<span style=\"color:#FF3300\">"+ parm.ip +"&nbsp;"+ parm.reason +"</span><br />";
		}
		scanok(sum);	// 检测是否扫描完成
	}
	$("#scan_log").append(html);	// 追加日志HTML
	$("#scan_log").scrollTop(10000000);	// 日志垂直滚动
}

function init(a,b,c){     // a 成功数 b 不成功数 c 还未扫描数
	$("#sparkline5").sparkline([a,b,c], {
		type: "pie",
		height: "480",
		sliceColors: ["#FF9933", "#663399","#CCCC00"]
	});
}

/**
 * 扫描完成提示
 * progress 进度数
 * sum 总数
 */
function scanok(sum){
	if(sum-unknown == 0){
		layer.alert('本次扫描完成:添加成功 <span style="color:#00CC00;font-weight:bold;">'+ successnum +'</span> 个设备,' +
			'添加失败: <span style="color:#FF3300;font-weight:bold;">'+ failnum +'</span> 个设备,' +
			'未知错误: <span style="color:#FFFF00;font-weight:bold;">'+ unknown +'</span> 个设备,' +
			'总设备数: <span style="color:#333333;font-weight:bold;">' + (successnum + failnum) +'</span>',{title : "扫描提示信息"});
		$("#scan").removeAttr("disabled");
	}
}
/**
 * 验证IP是否正确
 */
function ipInfo(ip,type){  
	var reSpaceCheck = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
	if (reSpaceCheck.test(ip)){  
		ip.match(reSpaceCheck);  
		if (RegExp.$1<=255 && RegExp.$1>=0 && RegExp.$2<=255 && RegExp.$2>=0 &&RegExp.$3<=255 && RegExp.$3>=0 &&RegExp.$4<=255 && RegExp.$4>=0){  
			if(type == 0){
				return true;
			}else if(type == 1){
				return RegExp.$1;
			}else if(type == 2){
				return RegExp.$2;
			}else if(type == 3){
				return RegExp.$3;
			}else if(type == 4){
				return RegExp.$4;
			}else{
				return false;
			}
		}else{  
			return false;  
		}
	}else{
		return false;
	}
}
/**
 * 传入一个起始ip 一个结束ip 返回一个ip列表
 * 起始ip不能比结束ip大
 * 必须是正常的ip
 * 失败返回false
 */
function getiplist(start,end){
	if(ipInfo(start,0) && ipInfo(end,0) && parseInt(ipInfo(end,4))>parseInt(ipInfo(start,4)) && ipInfo(start,1) == ipInfo(end,1) && ipInfo(start,2) == ipInfo(end,2) && ipInfo(start,3) == ipInfo(end,3)){
		var iplist = [];
		var id = 0;
		for (var i=parseInt(ipInfo(start,4));i<parseInt(ipInfo(end,4))+1;i++){
			iplist[id] = ipInfo(start,1) + "." + ipInfo(start,2) + "." + ipInfo(start,3) + "." + i;
			id ++;
		}
		return iplist;
	}else{
		return false;
	}
}